<?php
/**
 * Created by b17
 * 3/22/12 7:21 PM
 */

namespace Managers;

use Catalog\UserPayment as Entity,
    Catalog\Users as UserEntity,
    Managers\Exception\NoMoneyException;

class UserPayment extends BaseManager
{
    protected $__table = '\Catalog\UserPayment';

    /**
     * Выполняет платеж, сохраняет информация про него в БД.
     * В случаей нехватки денег кидает NoMoneyException.
     *
     * @param string $description описание платежа.
     * @param \Catalog\Users $user пользователь для оплаты.
     * @param float $cost стоимость попкупи.
     * @return Entity платеж
     */
    public function makePayment($description, UserEntity $user, $cost)
    {
        if ($user->getMoney() < $cost) {
            throw new NoMoneyException();
        }

        $user->setMoney($user->getMoney() - $cost);
        $this->_em->persist($user);

        $order = new Entity();
        $order->setCost($cost);
        $order->setCreatesAt(new \DateTime());
        $order->setDescription($description);
        $order->setUser($user);
        $this->_em->persist($order);

        $this->flush();
        return $order;
    }
}
